# -*- coding: utf-8 -*-
"""
PyRC module: pyrc_irc_abstract.resources.tld_table

Purpose
=======
 Provide TLD-related information and functions.
 
Legal
=====
 All code, unless otherwise indicated, is original, and subject to the terms of
 the GPLv2, which is provided in COPYING.
 
 (C) Neil Tallim, 2005-2007
"""
def tldLookup(dns_string):
	"""
	This function looks at a DNS string and returns the name of the country to
	which that string belongs.
	
	@type dns_string: basestring|None
	@param dns_string: An arbitrary DNS address.
	
	@rtype: unicode
	@return: The name of the country to which the hostmask belongs.
	"""
	if dns_string:
		tld_lookup = _TLD_CODES.get(dns_string[dns_string.rfind(".")+1:].lower())
		if tld_lookup:
			return unicode(tld_lookup)
	return u"Unknown"
	
_TLD_CODES = {
 'ac': "Ascension Island",
 'ad': "Andorra",
 'ae': "United Arab Emirates",
 'af': "Afghanistan",
 'ag': "Antigua/Barbuda",
 'ai': "Anguilla",
 'al': "Albania",
 'am': "Armenia",
 'an': "Netherlands Antilles",
 'ao': "Angola",
 'aq': "Antarctica",
 'ar': "Argentina",
 'as': "American Samoa",
 'at': "Austria",
 'au': "Australia",
 'aw': "Aruba",
 'ax': "Aland Islands",
 'az': "Azerbaijan",
 'ba': "Bosnia/Herzegovina",
 'bb': "Barbados",
 'bd': "Bangladesh",
 'be': "Belgium",
 'bf': "Burkina Faso",
 'bg': "Bulgaria",
 'bh': "Bahrain",
 'bi': "Burundi",
 'bj': "Benin",
 'bm': "Bermuda",
 'bn': "Brunei Darussalam",
 'bo': "Bolivia",
 'br': "Brazil",
 'bs': "Bahamas",
 'bt': "Bhutan",
 'bv': "Bouvet Island",
 'bw': "Botswana",
 'by': "Belarus",
 'bz': "Belize",
 'ca': "Canada",
 'cc': "Cocos (Keeling) Islands",
 'cd': "Congo, The Democratic Republic of the",
 'cf': "Central African Republic",
 'cg': "Congo, Republic of",
 'ch': "Switzerland",
 'ci': "Cote d'Ivoire",
 'ck': "Cook Islands",
 'cl': "Chile",
 'cm': "Cameroon",
 'cn': "China",
 'co': "Colombia",
 'com': "Commercial/Unknown",
 'cr': "Costa Rica",
 'cs': "Serbia/Montenegro",
 'cu': "Cuba",
 'cv': "Cape Verde",
 'cx': "Christmas Island",
 'cy': "Cyprus",
 'cz': "Czech Republic",
 'de': "Germany",
 'dj': "Djibouti",
 'dk': "Denmark",
 'dm': "Dominica",
 'do': "Dominican Republic",
 'dz': "Algeria",
 'ec': "Ecuador",
 'ee': "Estonia",
 'eg': "Egypt",
 'eh': "Western Sahara",
 'er': "Eritrea",
 'es': "Spain",
 'et': "Ethiopia",
 'fi': "Finland",
 'fj': "Fiji",
 'fk': "Falkland Islands (Malvinas)",
 'fm': "Micronesia, Federal State of",
 'fo': "Faroe Islands",
 'fr': "France",
 'ga': "Gabon",
 'gb': "United Kingdom",
 'gd': "Grenada",
 'ge': "Georgia",
 'gf': "French Guiana",
 'gg': "Guernsey",
 'gh': "Ghana",
 'gi': "Gibraltar",
 'gl': "Greenland",
 'gm': "Gambia",
 'gn': "Guinea",
 'gp': "Guadeloupe",
 'gq': "Equatorial Guinea",
 'gr': "Greece",
 'gs': "South Georgia/The South Sandwich Islands",
 'gt': "Guatemala",
 'gu': "Guam",
 'gw': "Guinea-Bissau",
 'gy': "Guyana",
 'hk': "Hong Kong",
 'hm': "Heard and McDonald Islands",
 'hn': "Honduras",
 'hr': "Croatia/Hrvatska",
 'ht': "Haiti",
 'hu': "Hungary",
 'id': "Indonesia",
 'ie': "Ireland",
 'il': "Israel",
 'im': "Isle of Man",
 'in': "India",
 'io': "British Indian Ocean Territory",
 'iq': "Iraq",
 'ir': "Iran, Islamic Republic of",
 'is': "Iceland",
 'it': "Italy",
 'je': "Jersey",
 'jm': "Jamaica",
 'jo': "Jordan",
 'jp': "Japan",
 'ke': "Kenya",
 'kg': "Kyrgyzstan",
 'kh': "Cambodia",
 'ki': "Kiribati",
 'km': "Comoros",
 'kn': "Saint Kitts/Nevis",
 'kp': "Korea, Democratic People's Republic",
 'kr': "Korea, Republic of",
 'kw': "Kuwait",
 'ky': "Cayman Islands",
 'kz': "Kazakhstan",
 'la': "Lao People's Democratic Republic",
 'lb': "Lebanon",
 'lc': "Saint Lucia",
 'li': "Liechtenstein",
 'lk': "Sri Lanka",
 'lr': "Liberia",
 'ls': "Lesotho",
 'lt': "Lithuania",
 'lu': "Luxembourg",
 'lv': "Latvia",
 'ly': "Libyan Arab Jamahiriya",
 'ma': "Morocco",
 'mc': "Monaco",
 'md': "Moldova, Republic of",
 'mg': "Madagascar",
 'mh': "Marshall Islands",
 'mk': "Macedonia, The Former Yugoslav Republic of",
 'ml': "Mali",
 'mm': "Myanmar",
 'mn': "Mongolia",
 'mo': "Macau",
 'mp': "Northern Mariana Islands",
 'mq': "Martinique",
 'mr': "Mauritania",
 'ms': "Montserrat",
 'mt': "Malta",
 'mu': "Mauritius",
 'mv': "Maldives",
 'mw': "Malawi",
 'mx': "Mexico",
 'my': "Malaysia",
 'mz': "Mozambique",
 'na': "Namibia",
 'nc': "New Caledonia",
 'ne': "Niger",
 'net': "Network/Unknown",
 'nf': "Norfolk Island",
 'ng': "Nigeria",
 'ni': "Nicaragua",
 'nl': "Netherlands",
 'no': "Norway",
 'np': "Nepal",
 'nr': "Nauru",
 'nu': "Niue",
 'nz': "New Zealand",
 'om': "Oman",
 'org': "Organization/Unknown",
 'pa': "Panama",
 'pe': "Peru",
 'pf': "French Polynesia",
 'pg': "Papua New Guinea",
 'ph': "Philippines",
 'pk': "Pakistan",
 'pl': "Poland",
 'pm': "Saint Pierre/Miquelon",
 'pn': "Pitcairn Island",
 'pr': "Puerto Rico",
 'pt': "Portugal",
 'pw': "Palau",
 'py': "Paraguay",
 'qa': "Qatar",
 're': "Reunion Island",
 'ro': "Romania",
 'ru': "Russian Federation",
 'rw': "Rwanda",
 'sa': "Saudi Arabia",
 'sb': "Solomon Islands",
 'sc': "Seychelles",
 'sd': "Sudan",
 'se': "Sweden",
 'sg': "Singapore",
 'sh': "Saint Helena",
 'si': "Slovenia",
 'sj': "Svalbard/Jan Mayen Islands",
 'sk': "Slovak Republic",
 'sl': "Sierra Leone",
 'sm': "San Marino",
 'sn': "Senegal",
 'so': "Somalia",
 'sr': "Suriname",
 'st': "Sao Tome/Principe",
 'sv': "El Salvador",
 'sy': "Syrian Arab Republic",
 'sz': "Swaziland",
 'tc': "Turks/Caicos Islands",
 'td': "Chad",
 'tf': "French Southern Territories",
 'tg': "Togo",
 'th': "Thailand",
 'tj': "Tajikistan",
 'tk': "Tokelau",
 'tl': "Timor-Leste",
 'tm': "Turkmenistan",
 'tn': "Tunisia",
 'to': "Tonga",
 'tp': "East Timor",
 'tr': "Turkey",
 'tt': "Trinidad/Tobago",
 'tv': "Tuvalu",
 'tw': "Taiwan",
 'tz': "Tanzania",
 'ua': "Ukraine",
 'ug': "Uganda",
 'uk': "United Kingdom",
 'um': "United States Minor Outlying Islands",
 'us': "United States",
 'uy': "Uruguay",
 'uz': "Uzbekistan",
 'va': "Holy See (Vatican City State)",
 'vc': "Saint Vincent/The Grenadines",
 've': "Venezuela",
 'vg': "Virgin Islands, British",
 'vi': "Virgin Islands, U.S.",
 'vn': "Vietnam",
 'vu': "Vanuatu",
 'wf': "Wallis and Futuna Islands",
 'ws': "Western Samoa",
 'ye': "Yemen",
 'yt': "Mayotte",
 'yu': "Yugoslavia",
 'za': "South Africa",
 'zm': "Zambia",
 'zw': "Zimbabwe"
} #: A dictionary of TLD codes and their corresponding countries.
